import { defineStore } from 'pinia'
import { computed, ref } from 'vue'

// 用户信息共享库
export const useUserStore = defineStore(
    'user',
    () => {
        const token = ref(null) // 登陆后的 redis key 值
        const id = ref(null)  // 编号
        const email = ref(null)  // 邮箱
        const nickname = ref(null)  // 昵称
        const headPic = ref(null)  // 头像
        const level = ref(null)  // 等级
        const time = ref(null)  // 注册的时间

        // 头像图片
        const head_image = computed(() => {
            if (!headPic.value) {
                return "https://www.qqkw.com/d/file/p/2022/04-20/78e18ea5bc32e078478b7822bfe89bc2.jpg"
            } else {
                return headPic.value
            }
        })

        // 昵称
        const nick_name = computed(() => {
            if (!nickname.value) {
                return "暂未设置昵称"
            } else {
                return nickname.value
            }
        })

        // 等级
        const level_info = computed(() => {
            if (level.value === 1) {
                return "超级会员"
            } else {
                return "会员"
            }
        })

        /**
         * 设置用户的信息
         * @param {String} u_token 登陆后的 redis key
         * @param {Object} user 用户对象 
         * @param {Number} user.id 编号 
         * @param {String} user.email 邮箱 
         * @param {String} user.nickname 昵称 
         * @param {String} user.headPic 头像 
         * @param {Number} user.level 等级 
         * @param {String} user.time 时间 
         */
        const setUserInfo = (u_token, user) => {
            token.value = u_token
            setUserBasicInfo(user) // 设置用户的基本信息
        }

        /**
        * 设置用户的基本信息
        * @param {Object} user 用户对象 
        * @param {Number} user.id 编号 
        * @param {String} user.email 邮箱 
        * @param {String} user.nickname 昵称 
        * @param {String} user.headPic 头像 
        * @param {Number} user.level 等级 
        * @param {String} user.time 时间 
        */
        const setUserBasicInfo = (user) => {
            id.value = user.id
            email.value = user.email
            nickname.value = user.nickname
            headPic.value = user.headPic
            level.value = user.level
            time.value = user.time
        }

        // 重置用户信息
        const resetUserInfo = () => {
            token.value = null
            id.value = null
            email.value = null
            nickname.value = null
            headPic.value = null
            level.value = null
            time.value = null
        }

        return {
            token, id, email, nickname, nick_name, headPic, head_image, level, level_info, time,
            setUserInfo, setUserBasicInfo, resetUserInfo
        }
    },
    {
        persist: {
            storage: localStorage, // 本地存储
        }
    }
)